package com.example.httpprocessor.http;

import com.google.gson.Gson;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Objects;

public abstract class HttpCallback <Result> implements ICallback{
    @Override
    public void onSuccess(String result) {
        //网络上返回来的数据  result
        // 1. 得到调用者用什么样子的javaBean 来接收数据
        Class<?> clz =  analysisClassInfo(this);
        // 2  把 String 转成javaBean 对象交给程序员
        Gson gson = new Gson();
        Result objResult = (Result)gson.fromJson(result,clz);
        getOnSuccess(objResult);
    }


    //  提供一个横版方法，让程序员使用
    public abstract void getOnSuccess(Result objResult);
    //  通过该功能得到输入的数据实际类型
    private Class<?> analysisClassInfo(Object object) {
        //  getGenericSuperclassnnn 返回一个类型对象
        //  这个对象可以得到包含原始类型，参数，数组，类型变量，基本数据类型等等
        Type getType = object.getClass().getGenericSuperclass();
        Type[] params = ((ParameterizedType)getType).getActualTypeArguments();
        return (Class<?>) params[0];

    }

    @Override
    public void onFailure(String e) {
        getOnFailure(e.toString());
    }

    //  提供一个横版方法，让程序员使用
    public abstract void getOnFailure(String objResult);
}
